from zope import interface

# every interface object in this package
# is here to represent some kind of data object
# that can be placed on to the workflow page
# the docstrings refer to behavior of the object, as 
# that may be more beneficial to read than line after line of
# "this is a gui-oriented data object for x"

class IWatchDataObject(interface.Interface):
    """base watch object"""


class IBranchDataObject(interface.Interface):
    """branches belong to watches"""

class IExecutePathDataObject(interface.Interface):
    """execute paths define the course of actions and transactions
       to be run within a branch
    """

class ITransactionDataObject(interface.Interface):
    """takes a set of action and attempts to perform them
       raising for any inability to complete
    """

class IDecisionDataObject(interface.Interface):
    """a simple set of if-elsif-else type logic steps"""

class IConditionDataObject(interface.Interface):
    """the actual if/elsif match set for a decision"""


class ITestBehaviorDataObject(interface.Interface):
    """a behavior to be used by specific conditions on test"""


class IActionDataObject(interface.Interface):
    """single actionable processess, owned by ExecutePath, 
       operated on by transaction
    """

class IRunBehaviorDataObject(interface.Interface):
    """a behavior defined to allow actions to implement action.run() 
       as generically as possible
    """

class IWorkItemDataObject(interface.Interface):
    """an item representing a workable unit, such as a file, binary image, 
       serialized data, xml stream, etc
    """
    

class IInputQueueDataObject(interface.Interface):
    """Input Queue, like a Folder, Web Service, etc"""


""" interface.Interfaces for watcher.scheduler """

class ISchedulerTimeDataObject(interface.Interface):
    """date/time determined by an xml config"""

class IWatchScheduleDataObject(interface.Interface):
    """watch scheduler.  takes start/stop times"""


class IWatchSchedulerDataObject(interface.Interface):
    """should be subscribed to by all Watches objects.
       in our case, a "state" change of the WatchScheduler will be triggered
       by a match condition on the watch_schedule for all of it's assigned
       watches.
    """

class IRootDataObject(interface.Interface):
    """root data object"""


class ICommentDataObject(interface.Interface):
    """comment data object"""


class ISimpleWatcherDataObject(interface.Interface):
    """simply an interface.Interface to mark that an object
       does in fact implement watch data object"""
    def guiObjXml():
        """xml describing the object to be rebuilt on the other side"""
        
    def watchBuilderXml():
        """must provide the ability to generate xml for the associated watcher object"""        





